package top.codetheory._01_动态数组.leetcode;

/**
 * @author:
 * @since: 2023/10/25 17:31
 **/
public class _27_移除元素 {

    public static void main(String[] args) {
        int[] nums = {3,2,2,2,3};

        System.out.println(removeElement(nums, 3));
    }

    public static int removeElement(int[] nums, int val) {
        int left = 0, right = nums.length - 1;  // 左闭右闭区间
        while (left <= right) {
            // 找左边等于val的下标, 找到了就不进循环, 没找到就进循环
            while (left <= right && nums[left] != val) {
                left++;
            }

            // 找右边不等于val的下标
            while (left <= right && nums[right] == val) {
                right--;
            }

            // 这里不能等于, 如果等于, 说明
            if (left < right) {
                // 替换left指向的val, 并且指针都跳过当前元素
                nums[left++] = nums[right--];
            }
        }
        return left;
    }
}